iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
AI 自動化

AI 公司模擬器:Discord x Multi-Agent 架構實作系列 第 3 篇

DAY 3|用 Python 啟動 Discord Bot,讓第一位 AI 員工開始工作

  • 分享至 

  • xImage
  •  

昨天我們完成了 Discord 應用程式與 Bot 的設定,也把 Bot 加入測試伺服器。

不過,Bot 目前仍然顯示離線。這是因為我們只有建立 Bot 帳號,還沒有執行真正讓它工作的程式。

今天要用 Python 啟動 Discord Bot,並建立第一個文字指令:

!hello

這次除了讓 Bot 上線,另一個重點是如何安全保存 Discord Bot Token,避免把它直接寫進程式碼。

上一篇:DAY 2|建立 Discord Bot,讓第一位 AI 員工上線

今天要完成什麼?

  • 建立 Python 專案與虛擬環境
  • 安裝 discord.py 與 python-dotenv
  • 建立 .env、.gitignore 與 requirements.txt
  • 從 .env 讀取 Discord Bot Token
  • 啟動 Bot 並測試 !hello

建立 Python 專案

先建立專案資料夾:

mkdir discord-ai-company
cd discord-ai-company

接著建立並啟用虛擬環境。

macOS 或 Linux:

python3 -m venv .venv
source .venv/bin/activate

Windows PowerShell:

py -m venv .venv
.venv\Scripts\Activate.ps1

虛擬環境可以讓這個專案擁有自己的 Python 套件,不會和其他專案混在一起。啟用成功後,終端機前面通常會出現 (.venv)。

安裝今天需要的套件:

python -m pip install -U discord.py python-dotenv

再把目前安裝的套件記錄到 requirements.txt:

python -m pip freeze > requirements.txt

完成後,專案結構會是:

discord-ai-company/
├── .venv/
├── .env
├── .gitignore
├── bot.py
└── requirements.txt

為什麼 Token 要放在 .env?

Discord Bot Token 是 Bot 登入 Discord 的憑證,可以把它想成 Bot 的密碼。

最直接的寫法,是把 Token 放進 Python 程式:

bot.run("你的DiscordBotToken")

雖然這樣可以執行,但 Token 會和程式碼放在一起。只要把程式碼貼到文章、傳給其他人,或上傳到 GitHub,就可能連同 Token 一起公開。

因此,我們不把 Token 寫死在 bot.py,而是放進獨立的 .env:

DISCORD_TOKEN=在這裡貼上你的DiscordBotToken

這樣做有幾個原因:

把 Token 放進 .env,主要是避免登入憑證和程式碼混在一起。分享 bot.py 或上傳 GitHub 時,就不會順便公開 Token。
.env 還要加入 .gitignore。如果它曾經被提交到 Git,即使後來加入忽略清單,舊紀錄仍然存在,這時應該重新產生 Token。

Bot Token 不要放進文章、截圖或 GitHub。如果 Token 曾經公開,請立即回到 Discord Developer Portal 重設權杖,讓舊 Token 失效。

建立 .gitignore

在專案根目錄建立 .gitignore:

.env
.venv/
__pycache__/
*.pyc

其中最重要的是:

.env

它會告訴 Git 不要追蹤 .env。

不過,如果 .env 已經被提交過,再把它加入 .gitignore 並不會清除舊紀錄。只要 Token 曾經進入 Git 紀錄,最安全的做法仍然是重新產生 Token。


從 .env 讀取 Token

在 bot.py 中,先載入 .env:

import os
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("DISCORD_TOKEN")

load_dotenv() 會讀取 .env,並把裡面的設定載入環境變數。

接著,os.getenv("DISCORD_TOKEN") 會取得我們放在 .env 裡的 Token。程式只知道要讀取名為 DISCORD_TOKEN 的設定,不需要知道實際內容。

如果 .env 沒有設定 Token,可以先停止程式:

if not token:
    raise RuntimeError("找不到 DISCORD_TOKEN,請檢查 .env。")

這樣可以比 Discord 登入失敗更早發現設定問題。


建立第一個 !hello 指令

完整的 bot.py 如下:

import os

import discord
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("DISCORD_TOKEN")

if not token:
    raise RuntimeError("找不到 DISCORD_TOKEN,請檢查 .env。")

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)


@bot.event
async def on_ready():
    print(f"Bot 已登入:{bot.user}")


@bot.command()
async def hello(ctx):
    await ctx.send("Hello!我已經上線了。")


bot.run(token)

這裡設定 command_prefix="!",代表 Bot 的文字指令會以 ! 開頭。

@bot.command() 則會把 hello() 註冊成指令。因此,當 Discord 頻道收到 !hello,Bot 就會回覆訊息。

另外,文字指令需要讀取訊息內容,所以除了 DAY 2 在 Discord Developer Portal 開啟 Message Content Intent,程式裡也要設定:

intents.message_content = True

啟動並測試 Bot

確認虛擬環境已啟用後,執行:

python bot.py

如果成功連上 Discord,終端機應該會顯示:

https://ithelp.ithome.com.tw/upload/images/20260917/20183880o85utwcaDV.png

回到 Discord 測試伺服器,在 Bot 可以查看並傳送訊息的頻道輸入:

!hello

Bot 預期會回覆:

https://ithelp.ithome.com.tw/upload/images/20260917/20183880PW7T7QwAff.png


今天的成果

執行 python bot.py 後,Bot 會從離線變成上線。在 Discord 輸入 !hello,確認它能讀取訊息並回覆。
目前的 Bot 只會執行預先寫好的指令。下一步要準備本地語言模型,讓它可以根據問題產生回答。


上一篇
DAY 2|建立 Discord Bot,讓第一位 AI 員工上線
下一篇
DAY 4|安裝 Ollama,在本機執行 Qwen
系列文
AI 公司模擬器:Discord x Multi-Agent 架構實作 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言